const path = require('path')
const webpack = require('webpack')
const CleanWebpackPlugin = require('clean-webpack-plugin').CleanWebpackPlugin
// const { CleanWebpackPlugin } = require('clean-webpack-plugin')
// https://webpack.docschina.org/plugins/dll-plugin/
// dll文件存放的目录
const dllPath = 'public/vendor'

module.exports = {
  entry: {
    // 需要提取的库文件
    vendor: ['raven-js', 'caret-pos', 'core-js', 'guid', 'heatmap.js', 'clipboard-js', 'vuex', 'vuedraggable', 'vue-router',
      'vue-highcharts', 'wavesurfer.js', 'xss', 'fetch-jsonp', 'plupload', 'vue-i18n',
      'md5', 'wangeditor', 'mermaid', 'element-ui']
  },
  output: {
    path: path.join(__dirname, dllPath),
    filename: '[name].dll.js',
    // vendor.dll.js中暴露出的全局变量名
    // 保持与 webpack.DllPlugin 中名称一致
    library: '[name]_[hash]'
  },
  plugins: [
    // 清除之前的dll文件
    new CleanWebpackPlugin(),
    // 设置环境变量
    new webpack.DefinePlugin({
      'process.env': {
        NODE_ENV: 'production'
      }
    }),
    // manifest.json 描述动态链接库包含了哪些内容,含了从 require 和 import 的request到模块 id 的映射。 DLLReferencePlugin 也会用到这个文件
    // 这个插件是在一个额外的独立的 webpack 设置中创建一个只有 dll 的 bundle(dll-only-bundle)。 这个插件会生成一个名为 manifest.json 的文件，
    // 这个文件是用来让 DLLReferencePlugin 映射到相关的依赖上去的
    new webpack.DllPlugin({
      path: path.join(__dirname, dllPath, '[name]-manifest.json'),
      // 保持与 output.library 中名称一致
      name: '[name]_[hash]',
      context: process.cwd()
    })
  ]
}
